s1_generate_a_series_of_files() {
    for i in {1..100}; do
        echo -n "$i" > "/tmp/new_file$i"
    done
}

s2_list_4_files_in_long_format_about_account_and_group() {
    files=("/etc/gshadow" "/etc/shadow" "/etc/group" "/etc/passwd")
    for file in "${files[@]}"; do
        if [ -e "$file" ]; then
            ls -l "$file"
        fi
    done
}

s3_find_items_related_to_given_username() {
    if [ -z "$1" ]; then
        echo "Usage: s3_find_items_related_to_given_username <username>"
        return 1
    fi
    { grep -h "^$1:" /etc/passwd /etc/shadow; 
      [ "$1" = "root" ] && grep -h "^operator:" /etc/passwd; } | sort
}

s4_find_items_related_to_given_group_name() {
    if [ -z "$1" ]; then
        echo "Usage: s4_find_items_related_to_given_group_name <groupname>"
        return 1
    fi
    grep -h "^$1:" /etc/group /etc/gshadow | sort
}

s5_create_groups_for_given_group_names() {
    groupadd rnd
    groupadd itoperation
}

s6_create_users_and_set_their_group_as_required() {
    useradd -m adam
    useradd -m bob
    useradd -m calvin
    useradd -m david
    useradd -m edward
    
    usermod -aG rnd adam
    usermod -aG rnd bob
    usermod -aG rnd edward
    usermod -aG itoperation calvin
    usermod -aG itoperation david
}

s7_change_users_shell() {
    usermod -s /usr/bin/sh adam
    usermod -s /usr/bin/sh edward
}

s8_set_password_change_policy() {
    for user in adam bob calvin david edward; do
        chage -m 10 -M 60 -W 10 $user
    done
}

s9_set_password_for_five_users() {
    if [ $# -lt 5 ]; then
        echo "Usage: s9_set_password_for_five_users <pass1> <pass2> <pass3> <pass4> <pass5>"
        return 1
    fi
    
    usermod -p '!' adam
    usermod -p '!' bob
    usermod -p '!' calvin
    usermod -p '!' david
    usermod -p '!' edward
    
}

s10_lock_bobs_password() {
    passwd -l bob
}

s11_include_adam_into_wheel_group() {
    /usr/sbin/usermod -aG wheel adam 2>/dev/null
    
    if ! groups adam | grep -q wheel; then
        /usr/bin/gpasswd -a adam wheel >/dev/null 2>&1
    fi
   
    if ! groups adam | grep -q wheel; then
        echo "Failed to add adam to wheel group" >&2
        return 1
    fi
}

s12_change_files_permission() {
    for i in {3..100..3}; do
        file="/tmp/new_file$i"
        chattr -a -i "$file" 2>/dev/null
        setfacl -b "$file" 2>/dev/null
        chmod u-s,g-s,o-t "$file"
        chmod 640 "$file"
        chown root:root "$file"
    done
}

